/* 
 * File:   LecteurFonction.h
 * Author: koelschl
 *
 * Created on 17 décembre 2012, 11:02
 */

#ifndef LECTEURFONCTION_H
#define	LECTEURFONCTION_H

#include <stdlib.h>
#include <iostream>
using namespace std;

class LecteurFonction {
public:
LecteurFonction(LecteurSymbole & ls);
// Construit un lecteur de fonction pour analyser une déclaration de fonction
// et bâtir les représentations nécessaires à son exécution.
// ls référence un lecteur de symbole dont le symbole courant est
// le 1er symbole de la déclaration.
// Après l'analyse, le symbole courant sera le premier symbole qui suit la déclaration.
int getValeur(vector<int> & p);
// évalue la fonction avec les valeurs de paramètres effectifs contenus dans la Pile p
// Si p ne contient pas nbParam valeurs, message d'erreur et fin du programme !
inline int operator == (string ch) { return nom == ch; } // renvoie vrai si nom=ch
////////////////////////////////////////////////////////////////////////////////
private:
LecteurSymbole &ls; // pointeur sur le lecteur de symboles utilisé pour analyser la fonction
TableSymboles ts; // la table des symboles valués de la fonction
Noeud* arbre; // l'arbre abstrait
string nom; // le nom (l'identificateur) de la fonction
unsigned short nbParam; // le nombre de paramètres de la fonction
// implémentation de la grammaire d'une déclaration de fonction
Noeud* declFonction(); // <decl_fonction> ::= fonction <variable> (<variable>{,<variable>}) = <expression>
Noeud* expression(); // <expression> ::= <facteur> { <op_binaire> <facteur> }
Noeud* facteur(); // <facteur> ::= <entier> | <variable> | - <facteur> | ( <expression> )
// et les outils habituels : sauterSymcour, testerSymcour, …


};
#endif	/* LECTEURFONCTION_H */

